import { message } from "antd";
import { refreshToken } from "@/api/user";
export const handleRequestHeader = (config) => {
  // 处理请求头，添加自定义的请求头字段
  config["xxxx"] = "xxx";
  return config; // 返回修改后的配置对象
};

export const handleConfigureAuth = (config) => {
  // 处理授权相关的请求头，添加 token 字段
  // 优先从 localStorage 中获取 token，如果没有则使用传入的 token 变量，再没有则设为空字符串
  const token = localStorage.getItem("access_token");
  config.headers = {
    Authorization: token ? "Bearer " + token : "",
  };
  return config; // 返回修改后的配置对象
};

export const handleNetworkError = async (errStatus) => {
  // 处理网络错误，根据错误状态码返回对应的错误信息
  let errMessage = "未知错误"; // 默认的错误信息
  if (errStatus) {
    switch (errStatus) {
      case 400:
        errMessage = "错误的请求"; // 请求格式错误
        break;
      case 401:
        errMessage = "未授权，请重新登录"; // 未授权，需要重新登录
        break;
      case 403:
        errMessage = "拒绝访问"; // 服务器拒绝访问
        break;
      case 404:
        errMessage = "请求错误,未找到该资源"; // 服务器找不到请求的资源
        break;
      case 405:
        errMessage = "请求方法未允许"; // 请求方法不允许
        break;
      case 408:
        errMessage = "请求超时"; // 请求超时
        break;
      case 419:
        console.log("419");

        try {
          console.log("刷新成功");
          if (localStorage.getItem("refresh_token")) {
            let result = await refreshToken({
              refresh: localStorage.getItem("refresh_token"),
            });

            if (result.status == 200) {
              localStorage.setItem("access_token", result.data.access);
              // // 令牌刷新成功，更新请求头中的令牌，并重新发送挂起的请求
              error.config.headers["Authorization"] =
                "Bearer " + result.data.access;
              // 重新发送原始请求
              // 尝试将请求体反序列化为对象
              error.config.data = JSON.parse(error.config.data);
              return request(error.config);
            }
          }
        } catch (error) {
          message.error("刷新令牌失败，请重新登录");
          localStorage.removeItem("refresh_token");
          // 跳转到登录页面
          router.push("/login");
        }
        // alert(error.response.data.error);
        break;

      case 500:
        errMessage = "服务器端出错"; // 服务器内部错误
        break;
      case 501:
        errMessage = "网络未实现"; // 网络未实现
        break;
      case 502:
        errMessage = "网络错误"; // 网络错误
        break;
      case 503:
        errMessage = "服务不可用"; // 服务不可用
        break;
      case 504:
        errMessage = "网络超时"; // 网络超时
        break;
      case 505:
        errMessage = "http版本不支持该请求"; // HTTP 版本不支持
        break;
      default:
        errMessage = `其他连接错误 --${errStatus}`; // 其他连接错误
    }
  } else {
    errMessage = `无法连接到服务器！`; // 无法连接到服务器
  }
  message.error(errMessage); // 显示错误信息
};

export const handleAuthError = (errno) => {
  // 处理授权错误，根据错误码返回对应的错误信息
  const authErrMap = {
    10031: "登录失效，需要重新登录", // token 失效
    10032: "您太久没登录，请重新登录~", // token 过期
    10033: "账户未绑定角色，请联系管理员绑定角色",
    10034: "该用户未注册，请联系管理员注册用户",
    10035: "code 无法获取对应第三方平台用户",
    10036: "该账户未关联员工，请联系管理员做关联",
    10037: "账号已无效",
    10038: "账号未找到",
  };

  if (authErrMap.hasOwnProperty(errno)) {
    message.error(authErrMap[errno]); // 显示授权错误信息
    logout(); // 退出登录
    return false; // 返回 false，表示处理了授权错误
  }
  return true; // 返回 true，表示没有授权错误
};

// export const handleGeneralError = (errno, errmsg) => {
//   // 处理一般错误，如果错误码不为 '0'，则显示错误信息
//   if (errno !== "0" ||) {
//     message.error(errmsg); // 显示错误信息
//     return false; // 返回 false，表示处理了错误
//   }
//   return true; // 返回 true，表示没有错误
// };
